package com.neuedu.his5.mvc;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

// 自定义拦截器，实现 HandlerInterceptor 接口
public class LoginInterceptor implements HandlerInterceptor {

    // 请求到达 Controller 方法之前执行（最常用）
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        // 从请求里拿 token（假设前端把 token 放请求参数或 header 里）
       // String token = request.getParameter("token");
        // 简单校验：如果没 token，返回 false 拦截请求；有 token 就放行
//        if (token == null || token.isEmpty()) {
//            // 也可以跳转登录页，或者返回 JSON 提示未登录
//            response.getWriter().write("please login");
//            return false;
//        }
        // 返回 true，请求继续往下走（到 Controller）
        return true;
    }

    // Controller 方法执行完，视图渲染之前执行（用得少，一般改改 ModelAndView 数据）
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        // 比如给所有返回的视图统一加个数据
        if (modelAndView != null) {
            modelAndView.addObject("systemTime", System.currentTimeMillis());
        }
    }

    // 整个请求处理完（包括视图渲染）后执行（一般用来清理资源、记录最终日志）
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {
        // 比如记录请求耗时、释放线程本地变量（ThreadLocal）
        System.out.println("请求处理完毕，做些清理工作~");
    }
}